package jtg.model;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.Properties;

import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Ente extends AbstractModelObject {

	private String sindaco;
	private String testo;
	private String mail;
	private String url;
	private String telefono;
	private String codiceCertificato;
	private String istat;
	private String versione;
	private String urlPeople;
	private String nome;
	Properties propsRiferimentiEnte;
	private String directory;
	private static final String immagini="img";
	private static final String riferimenti="riferimenti.properties";
	public String urlFile;
	private String firma;
	private String logo;

	public Ente(File file) throws Exception{
		try {
			this.urlFile=file.getAbsolutePath();
			setDirectory(file.getAbsolutePath());
			propsRiferimentiEnte = new Properties();
			propsRiferimentiEnte.load(new FileInputStream(urlFile+"/"+riferimenti));
			setSindaco(propsRiferimentiEnte.getProperty("sindaco"));
            setTesto(propsRiferimentiEnte.getProperty("testo"));
            setMail(propsRiferimentiEnte.getProperty("mail"));
            setUrl(propsRiferimentiEnte.getProperty("sito"));
            setTelefono(propsRiferimentiEnte.getProperty("telefono"));
            setCodiceCertificato(propsRiferimentiEnte.getProperty("codiceCertificato"));
            setIstat(propsRiferimentiEnte.getProperty("codiceIstat"));
            setVersione(propsRiferimentiEnte.getProperty("versione"));
            setUrlPeople(propsRiferimentiEnte.getProperty("sitoPeople"));
            setNome(propsRiferimentiEnte.getProperty("nome"));
            if(new File(propsRiferimentiEnte.getProperty("logo")).exists())
            	setLogo(propsRiferimentiEnte.getProperty("logo"));
            else if(new File(urlFile+"/"+immagini+"/logo.gif").exists())
            	setLogo(urlFile+"/"+immagini+"/logo.gif");
            else if(new File(urlFile+"/logo.gif").exists())
            	setLogo(urlFile+"/logo.gif");
            if(new File(propsRiferimentiEnte.getProperty("firma")).exists())
            	setFirma(propsRiferimentiEnte.getProperty("firma"));
            else if(new File(urlFile+"/"+immagini+"/firma.gif").exists())
            	setFirma(urlFile+"/"+immagini+"/firma.gif");
            else if(new File(urlFile+"/firma.gif").exists())
            	setFirma(urlFile+"/firma.gif");
		} catch (FileNotFoundException e) {
			//throw new Exception(e.getMessage()+" in "+file.getAbsolutePath());
			setSindaco("");
            setTesto("");
            setMail("");
            setUrl("");
            setTelefono("");
            setCodiceCertificato("");
            setIstat("");
            setVersione("");
            setUrlPeople("");
            setNome(file.getName());
            setLogo("");
            setFirma("");
		} catch (IOException e) {
			//throw new Exception(e.getMessage()+" in "+file.getAbsolutePath());
			setSindaco("");
            setTesto("");
            setMail("");
            setUrl("");
            setTelefono("");
            setCodiceCertificato("");
            setIstat("");
            setVersione("");
            setUrlPeople("");
            setNome(file.getName());
            setLogo("");
            setFirma("");
		} catch (Exception e) {
			throw new Exception(e.getMessage()+" in "+file.getAbsolutePath());
		}
		propsRiferimentiEnte.store(new FileOutputStream(urlFile+"/"+riferimenti),null);
	}

	public void setFirma(String p) throws Exception {
		if(p==null || p.equals(""))
			p="";
			//throw new Exception("path Firma non corretto");
		firePropertyChange("firma", firma, p);
		this.firma=p;
		propsRiferimentiEnte.setProperty("firma", p);
	}

	public void setLogo(String p) throws Exception {
		if(p==null || p.equals(""))
			p="";
			//throw new Exception("path del logo non corretto");
		firePropertyChange("logo", logo, p);
		this.logo=p;
		propsRiferimentiEnte.setProperty("logo", p);
	}

	private void setDirectory(String dir) {
		this.directory=dir;
	}

	public void setNome(String p) throws Exception {
		if(p==null || p.equals(""))
			p="";
			//throw new Exception("nome comune non corretto");
		firePropertyChange("nome", nome, p);
		this.nome=p;
		propsRiferimentiEnte.setProperty("nome", p);
	}

	public void setUrlPeople(String p) throws Exception {
		if(p==null || p.equals(""))
			p="";
			//throw new Exception("sitoPeople non corretto");
		firePropertyChange("urlPeople", urlPeople, p);
		this.urlPeople=p;
		propsRiferimentiEnte.setProperty("sitoPeople", p);
	}

	public void setVersione(String p) throws Exception {
		if(p==null || p.equals(""))
			p="";
			//throw new Exception("versione non corretta");
		firePropertyChange("versione", versione, p);
		this.versione=p;
		propsRiferimentiEnte.setProperty("versione", p);
	}

	public void setIstat(String p) throws Exception {
		if(p==null || p.equals(""))
			p="";
			//throw new Exception("codice istat non corretto");
		firePropertyChange("istat", istat, p);
		this.istat=p;
		propsRiferimentiEnte.setProperty("codiceIstat", p);
	}

	public void setCodiceCertificato(String p) throws Exception {
		if(p==null || p.equals(""))
			p="";
			//throw new Exception("codiceCertificato non corretto");
		firePropertyChange("codiceCertificato", codiceCertificato, p);
		this.codiceCertificato=p;
		propsRiferimentiEnte.setProperty("codiceCertificato", p);
	}

	public void setTelefono(String p) throws Exception {
		if(p==null || p.equals(""))
			p="";
			//throw new Exception("telefono non corretto");
		firePropertyChange("telefono", telefono, p);
		this.telefono=p;
		propsRiferimentiEnte.setProperty("telefono", p);
	}

	public void setUrl(String p) throws Exception {
		if(p==null || p.equals(""))
			p="";
			//throw new Exception("sito non corretto");
		firePropertyChange("url", url, p);
		this.url=p;
		propsRiferimentiEnte.setProperty("sito", p);
	}

	public void setMail(String p) throws Exception {
		if(p==null || p.equals(""))
			p="";
			//throw new Exception("mail non corretta");
		firePropertyChange("mail", mail, p);
		this.mail=p;
		propsRiferimentiEnte.setProperty("mail", p);
	}

	public void setTesto(String p) throws Exception {
		if(p==null || p.equals(""))
			p="";
			//throw new Exception("testo non corretto");
		firePropertyChange("testo", testo, p);
		this.testo=p;
		propsRiferimentiEnte.setProperty("testo", p);
	}

	public void setSindaco(String p) throws Exception {
		if(p==null || p.equals(""))
			p="";
			//throw new Exception("sindaco non corretto");
		firePropertyChange("sindaco", sindaco, p);
		this.sindaco=p;
		propsRiferimentiEnte.setProperty("sindaco", p);
	}

	public String getTesto() {
		return testo;
	}

	public String getMail() {
		return mail;
	}

	public String getUrl() {
		return url;
	}

	public String getTelefono() {
		return telefono;
	}

	public String getCodiceCertificato() {
		return codiceCertificato;
	}

	public String getIstat() {
		return istat;
	}

	public String getVersione() {
		return versione;
	}

	public String getUrlPeople() {
		return urlPeople;
	}

	public String getNome() {
		return nome;
	}
	
	public String getFirma() {
		return firma;
	}

	public String getLogo() {
		return logo;
	}

	public String getSindaco() {
		return sindaco;
	}

	public String getProperty(String kt) {
		return propsRiferimentiEnte.getProperty(kt);
	}
	
	public Iterator getIteratorProperty(){
		return propsRiferimentiEnte.keySet().iterator();
	}
	
	public String getDirectory(){
		return directory;
	}

	public void setSalva(JTextField comune_textField,
			JTextField istat_textField,
			JTextField sindaco_textField,
			JTextField mail_textField,
			JTextField telefono_textField,
			JTextField url_textField,
			JTextField urlPeople_textField,
			JTextField codiceCertificato_textField,
			JTextField versione_textField,
			JTextArea testo_textArea,
			JTextField logo_textField,
			JTextField firma_textField) throws Exception {

		String error="";
		if(		comune_textField.getText().equals("")){
			error+="Comune";
		}else
			this.setNome(comune_textField.getText());
		
		if(		istat_textField.getText().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="istat";
		}else
			this.setIstat(istat_textField.getText());
		
		if(		sindaco_textField.getText().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="sindaco";
		}else
			this.setSindaco(sindaco_textField.getText());
		
		if(		mail_textField.getText().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="mail";
		}else
			this.setMail(mail_textField.getText());
		
		if(		telefono_textField.getText().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="telefono";
		}else
			this.setTelefono(telefono_textField.getText());
		
		if(		url_textField.getText().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="url";
		}else
			this.setUrl(url_textField.getText());
		
		if(		urlPeople_textField.getText().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="url People";
		}else
			this.setUrlPeople(urlPeople_textField.getText());
		
		if(		codiceCertificato_textField.getText().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="codice Certificato";
		}else
			this.setCodiceCertificato(codiceCertificato_textField.getText());
		
		if(		versione_textField.getText().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="versione";
		}else
			this.setVersione(versione_textField.getText());
		
		if(		testo_textArea.getText().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="testo";
		}else
			this.setTesto(testo_textArea.getText());
		
		if(		firma_textField.equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="firma";
		}else
			this.setFirma(firma_textField.getText());
		
		if(		logo_textField.getText().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="logo";
		}else
			this.setLogo(logo_textField.getText());

		if(!error.equals(""))
			throw new Exception(error);
		propsRiferimentiEnte.store(new FileOutputStream(urlFile+"/"+riferimenti),null);
	}
	
	public void verify() throws Exception {
		String error="";
		if(		getNome().equals("")){
			error+="Comune";
		}
		
		if(		getIstat().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="istat";
		}
		
		if(		getSindaco().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="sindaco";
		}
		
		if(		getMail().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="mail";
		}
		
		if(		getTelefono().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="telefono";
		}
		
		if(		getUrl().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="url";
		}
		
		if(		getUrlPeople().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="url People";
		}
		
		if(		getCodiceCertificato().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="codice Certificato";
		}
		
		if(		getVersione().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="versione";
		}
		
		if(		getTesto().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="testo";
		}
		
		if(		getFirma().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="firma";
		}
		
		if(		getLogo().equals("")){
			if(!error.equals(""))
				error+=", ";
			error+="logo";
		}

		if(!error.equals("")){
			String ente=getDirectory();
			if(!getNome().equals(""))
				ente=getNome();
			throw new Exception(ente+": Occorre compilare i campi "+error);
		}
	}
}